# coding: utf-8
# 文字列をバイナリ化してファイル出力する

import struct, binascii

# ----------------------------------------------------------------
# 文字列リスト
# ----------------------------------------------------------------
str_dict = {
            "good_morning"  : "おはよう",
            "good_afternoon": "こんにちは",
            "good_evening"  : "こんばんは",
            "good_night"    : "おやすみ"
            }
str_list = str_dict.values()

# ----------------------------------------------------------------
# パック
# ----------------------------------------------------------------
s = struct.Struct( " ".join( ["16s" for v in range(len(str_list))] ) )
packed_value = s.pack(*[ str.encode() for str in str_list ])

# ----------------------------------------------------------------
# バイナリファイルを出力
# ----------------------------------------------------------------
f = open("str_list.bin", "wb")
f.write(packed_value)
f.close()

# ----------------------------------------------------------------
# ヘッダーファイルを出力
# ----------------------------------------------------------------
f = open("str_list.def", "w")
f.write("""
// 文字列リストのID
""")
for i, key in enumerate(str_dict.keys()):
    f.write( "static const int ID_{name} = {value};\n".format(name=key.upper(), value=i) )
f.close()

# ----------------------------------------------------------------
# 出力したファイルからバイナリを読み込んでアンパックする
# ----------------------------------------------------------------
f = open("str_list.bin", "rb")
unpacked_value = s.unpack(f.read())
f.close()

# ----------------------------------------------------------------
# 表示
# ----------------------------------------------------------------
print("Format String :", s.format)
print("Original Value:", str_list)
print("Packed Value  :", packed_value)
print("0xPacked Value:", binascii.hexlify(packed_value))
print("Size          :", s.size, "bytes")
print("Unpacked Value:", [ b.decode() for b in unpacked_value ] )


""" 実行結果
Format String : b'16s 16s 16s 16s'
Original Value: dict_values(['おやすみ', 'こんにちは', 'こんばんは', 'おはよう'])
Packed Value  : b'\xe3\x81\x8a\xe3\x82\x84\xe3\x81\x99\xe3\x81\xbf\x00\x00\x00\x00\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf\x00\xe3\x81\x93\xe3\x82\x93\xe3\x81\xb0\xe3\x82\x93\xe3\x81\xaf\x00\xe3\x81\x8a\xe3\x81\xaf\xe3\x82\x88\xe3\x81\x86\x00\x00\x00\x00'
0xPacked Value: b'e3818ae38284e38199e381bf00000000e38193e38293e381abe381a1e381af00e38193e38293e381b0e38293e381af00e3818ae381afe38288e3818600000000'
Size          : 64 bytes
Unpacked Value: ['おやすみ\x00\x00\x00\x00', 'こんにちは\x00', 'こんばんは\x00', 'おはよう\x00\x00\x00\x00']
"""


